package cn.lingyangwl.agile.system.service;


import cn.lingyangwl.agile.system.model.entity.AccessKey;
import cn.lingyangwl.agile.system.model.rqrs.accesskey.AccessKeyQuery;
import cn.lingyangwl.agile.system.model.rqrs.accesskey.AccessKeyResp;
import cn.lingyangwl.agile.system.model.rqrs.accesskey.AccessKeySaveReq;
import cn.lingyangwl.agile.model.module.auth.LoginUser;
import cn.lingyangwl.agile.system.model.rqrs.accesskey.AccessKeyDetailsReq;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
/**
 * API访问密钥
 *
 * @author shenguangyang
 */
public interface AccessKeyService extends IService<AccessKey> {
    /**
     * 分页查询 API访问密钥
     *
     * @return 返回分页数据
     */
    List<AccessKeyResp> listAccessKey(AccessKeyQuery query);

    /**
     * 保存 API访问密钥
     *
     */
    boolean saveAccessKey(AccessKeySaveReq rq);

    /**
     * 更新 API访问密钥
     *
     * @param rq 修改的记录
     * @return 是否更新成功
     */
    boolean updateAccessKeyById(AccessKeySaveReq rq);

    /**
     * 获取密钥, 该接口安全性要求高, 所以只能是内网服务之间才可以访问 <br/>
     * 调用方加缓存, 会提高性能
     */
    AccessKeyResp getAccessKeyBySecretId(String secretId);

    /**
     * 通过id获取 API访问密钥
     *
     * @param id 主键
     * @return 是否删除成功
     */
    AccessKeyResp getAccessKeyById(Long id, LoginUser loginUser);

    /**
     * 通过id删除 API访问密钥
     *
     * @param id 主键
     * @return 是否删除成功
     */
    boolean deleteAccessKey(Long id);

    /**
     * 通过id删除 API访问密钥
     *
     * @param ids 主键集合
     * @return 是否删除成功
     */
    boolean batchDeleteAccessKey(List<Long> ids);

    /**
     * 获取基本信息, secretKey 会被清除
     */
    AccessKeyResp getAccessKeyBaseInfoById(Long id);

    AccessKeyResp getAccessKeyDetails(AccessKeyDetailsReq req);
}
